import websocketService from "@/utils/websocket";
import requestWs from "@/utils/request_ws";

// =============== WebSocket 聊天功能 ===============

/**
 * 初始化聊天WebSocket连接
 * @param {string} wsUrl - WebSocket服务器地址，默认使用配置的地址
 * @returns {boolean} - 返回是否成功初始化
 */
export function initChatWebSocket(wsUrl = 'ws://localhost:20004/ws/chat') {
  if (websocketService.connected || websocketService.connecting) {
    return true;
  }
  
  try {
    // 启用自动重连功能
    websocketService.enableReconnect();
    websocketService.init(wsUrl);
    return true;
  } catch (error) {
    console.error('初始化聊天WebSocket失败:', error);
    return false;
  }
}

/**
 * 发送聊天消息
 * @param {Object} data - 消息数据
 * @param {string} data.classroomId - 班级ID
 * @param {string} data.content - 消息内容
 * @returns {Promise} - 返回发送结果的Promise
 */
export function sendChatMessage(data) {
  if (!data.classroomId || !data.content?.trim()) {
    return Promise.reject(new Error('班级ID和消息内容不能为空'));
  }
  
  // 检查WebSocket连接状态
  if (!websocketService.connected) {
    return Promise.reject(new Error('WebSocket未连接，请先初始化连接'));
  }
  
  // 创建消息对象
  const messageData = {
    groupId: data.classroomId,
    content: data.content
  };
  
  // 使用WebSocket发送消息
  return new Promise((resolve, reject) => {
    // 发送消息，使用'chat_message'作为消息类型
    const success = websocketService.send('chat_message', messageData);
    
    if (success) {
      resolve({
        success: true,
        message: '消息已发送'
      });
    } else {
      reject(new Error('发送消息失败，WebSocket可能已断开'));
    }
  });
}

/**
 * 注册聊天消息接收回调
 * @param {Function} callback - 接收到消息时的回调函数
 */
export function onChatMessage(callback) {
  // 注册消息回调，指定为'chat_message'类型
  websocketService.onMessageType('chat_message', callback);
}

/**
 * 断开WebSocket连接
 * @returns {boolean} - 是否成功断开
 */
export function disconnectChatWebSocket() {
  if (websocketService.connected) {
    websocketService.close();
    return true;
  }
  return false;
}

/**
 * 获取WebSocket当前连接状态
 * @returns {Object} - 连接状态对象
 */
export function getChatConnectionStatus() {
  return {
    connected: websocketService.connected,
    connecting: websocketService.connecting,
    reconnectAttempts: websocketService.reconnectAttempts
  };
}

/**
 * 获取群组历史消息
 * @param {number} groupId - 群组ID
 * @param {number} offset - 起始位置，默认为0
 * @param {number} limit - 获取数量，默认为100
 * @returns {Promise} - 返回获取结果的Promise
 */
export function getGroupMessages(groupId, offset = 0, limit = 100) {
  if (!groupId) {
    return Promise.reject(new Error('群组ID不能为空'));
  }
  
  return requestWs({
    url: '/groups/' + groupId + '/messages',
    method: 'get',
    params: {
      offset,
      limit
    }
  }).then(response => {
    // 返回消息数组
    return response.data;
  }).catch(error => {
    console.error('获取群组历史消息失败:', error);
    return Promise.reject(error);
  });
} 